package cn.kgc.spring07.proxy;

import cn.kgc.spring07.mapper.UserMapper;
import cn.kgc.spring07.mapper.impl.UserMapperImpl;

/**
 * @author: mosin
 * @version: v1.0  2022/12/5
 * 代理类
 * 代理模式：
 * 1.静态代理
 *     基于接口的代理
 *  1.1编写一个代理类实现和被代理类一样的接口
 *      面向接口开发
 *  1.2代理类要依赖于被代理类
 *      保持原有功能不变
 *   优点：  1.简单  2.解决了不修改源码实现代码功能增强
 *   缺点：  1.代码不易维护  2.代码冗余 （增强功能）
 * 2.动态代理
 *     在程序运行的过程中，动态的创建代理对象，不需要编写实际的代理类
 *  2.1 JDK
 *      1.基于接口的代理  动态生成的代理对象和被代理对象实现了相同的接口
 *  2.2 cglib
 *      1.基于父子类关系的代理  teacherMapperImpl没有任何任何接口
 *
 *  总结： 静态代理和jdk的动态代理都是基于接口代理
 */
public class UserMapperImplStaticProxy implements UserMapper {

    private UserMapperImpl userMapperImpl = new UserMapperImpl();

    @Override
    public Integer delete(Integer id) {
        System.out.println("-----------log日志-------------");
        Integer delete = userMapperImpl.delete(id);
        System.out.println("-----------log日志-------------");
        return delete;
    }

    @Override
    public Integer add() {
        System.out.println("-----------log日志-------------");
        Integer add = userMapperImpl.add();
        System.out.println("-----------log日志-------------");
        return add;
    }

    @Override
    public Integer update() {
        return null;
    }


    public static void main(String[] args) {

        UserMapperImplStaticProxy userMapperImplStaticProxy = new UserMapperImplStaticProxy();

        try {
            //连接点
            userMapperImplStaticProxy.add();
            //连接点
        } catch (Exception e) {
            // 连接点
            e.printStackTrace();
        } finally {
            //连接点
        }

        userMapperImplStaticProxy.delete(1);


    }
}
